<?php
// +---------------------------------------------------------------------+
// | OneBase    | [ WE CAN DO IT JUST THINK ]                            |
// +---------------------------------------------------------------------+
// | Licensed   | http://www.apache.org/licenses/LICENSE-2.0 )           |
// +---------------------------------------------------------------------+
// | Author     | Bigotry <3162875@qq.com>                               |
// +---------------------------------------------------------------------+
// | Repository | https://gitee.com/Bigotry/OneBase                      |
// +---------------------------------------------------------------------+

/**
 * 应用公共（函数）文件
 */

use think\Db;
use think\Response;
use think\exception\HttpResponseException;
use app\common\logic\File as LogicFile;


// +---------------------------------------------------------------------+
// | 系统相关函数
// +---------------------------------------------------------------------+

/**
 * 检测用户是否登录
 * @return integer 0-未登录，大于0-当前登录用户ID
 */
function is_login()
{
    
    $member = session('member_auth');
    
    if (empty($member)) {
        
        return DATA_DISABLE;
    } else {
        
        return session('member_auth_sign') == data_auth_sign($member) ? $member['member_id'] : DATA_DISABLE;
    }
}

/**
 * 系统非常规MD5加密方法
 * @param  string $str 要加密的字符串
 * @return string 
 */
function data_md5($str, $key = 'OneBase')
{
    
    return '' === $str ? '' : md5(sha1($str) . $key);
}

/**
 * 使用上面的函数与系统加密KEY完成字符串加密
 * @param  string $str 要加密的字符串
 * @return string 
 */
function data_md5_key($str, $key = '')
{
    
    if (is_array($str)) {
        
        ksort($str);

        $data = http_build_query($str);
        
    } else {
        
        $data = (string) $str;
    }
    
    return empty($key) ? data_md5($data, SYS_ENCRYPT_KEY) : data_md5($data, $key);
}

/**
 * 数据签名认证
 * @param  array  $data 被认证的数据
 * @return string       签名
 */
function data_auth_sign($data)
{
    
    // 数据类型检测
    if (!is_array($data)) {
        
        $data = (array)$data;
    }
    
    // 排序
    ksort($data);
    
    // url编码并生成query字符串
    $code = http_build_query($data);
    
    // 生成签名
    $sign = sha1($code);
    
    return $sign;
}

/**
 * 检测当前用户是否为管理员
 * @return boolean true-管理员，false-非管理员
 */
function is_administrator($member_id = null)
{
    
    $return_id = is_null($member_id) ? is_login() : $member_id;
    
    return $return_id && (intval($return_id) === SYS_ADMINISTRATOR_ID);
}

/**
 * 获取单例对象
 */
function get_sington_object($object_name = '', $class = null)
{

    $request = request();
    
    $request->__isset($object_name) ?: $request->bind($object_name, new $class());
    
    return $request->__get($object_name);
}

/**
 * 获取插件类的类名
 * @param strng $name 插件名
 */
function get_addon_class($name = '')
{
    
    $lower_name = strtolower($name);
    
    $class = SYS_ADDON_DIR_NAME. SYS_DS_CONS . $lower_name . SYS_DS_CONS . $name;
    
    return $class;
}

/**
 * 钩子
 */
function hook($tag = '', $params = [])
{
    
    \think\Hook::listen($tag, $params);
}

/**
 * 插件显示内容里生成访问插件的url
 * @param string $url url
 * @param array $param 参数
 */
function addons_url($url, $param = array())
{

    $parse_url  =  parse_url($url);
    $addons     =  $parse_url['scheme'];
    $controller =  $parse_url['host'];
    $action     =  $parse_url['path'];

    /* 基础参数 */
    $params_array = array(
        'addon_name'      => $addons,
        'controller_name' => $controller,
        'action_name'     => substr($action, 1),
    );

    $params = array_merge($params_array, $param); //添加额外参数
    
    return url('addon/execute', $params);
}

/**
 * 插件对象注入
 */
function addon_ioc($this_class, $name, $layer)
{
    
    !str_prefix($name, $layer) && exception('逻辑与模型层引用需前缀:' . $layer);

    $class_arr = explode(SYS_DS_CONS, get_class($this_class));

    $sr_name = sr($name, $layer);

    $class_logic = SYS_ADDON_DIR_NAME . SYS_DS_CONS . $class_arr[DATA_NORMAL] . SYS_DS_CONS . $layer . SYS_DS_CONS . $sr_name;

    return get_sington_object(SYS_ADDON_DIR_NAME . '_' . $layer . '_' . $sr_name, $class_logic);
}

/**
 * 抛出响应异常
 */
function throw_response_exception($data = [], $type = 'json')
{
    
    $response = Response::create($data, $type);

    throw new HttpResponseException($response);
}

/**
 * 获取访问token
 */
function get_access_token()
{

    return md5('lptx' . date("Ymd"). API_KEY);
}

/**
 * 格式化字节大小
 * @param  number $size      字节数
 * @param  string $delimiter 数字和单位分隔符
 * @return string            格式化后的带单位的大小
 */
function format_bytes($size, $delimiter = '')
{
    
    $units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
    
    for ($i = 0; $size >= 1024 && $i < 5; $i++) {
        
        $size /= 1024;
    }
    
    return round($size, 2) . $delimiter . $units[$i];
}


// +---------------------------------------------------------------------+
// | 数组相关函数
// +---------------------------------------------------------------------+

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pid parent标记字段
 * @param string $level level标记字段
 * @return array
 */
function list_to_tree($list, $pk='id', $pid = 'pid', $child = '_child', $root = 0)
{
    
    // 创建Tree
    $tree = [];
    
    if (!is_array($list)) {
        
        return false;
    }
    
    // 创建基于主键的数组引用
    $refer = [];

    foreach ($list as $key => $data) {

        $refer[$data[$pk]] =& $list[$key];
    }

    foreach ($list as $key => $data) {

        // 判断是否存在parent
        $parentId =  $data[$pid];

        if ($root == $parentId) {

            $tree[] =& $list[$key];

        } else if (isset($refer[$parentId])){

            is_object($refer[$parentId]) && $refer[$parentId] = $refer[$parentId]->toArray();
            
            $parent =& $refer[$parentId];

            $parent[$child][] =& $list[$key];
        }
    }
    
    return $tree;
}

/**
 * 分析数组及枚举类型配置值 格式 a:名称1,b:名称2
 * @return array
 */
function parse_config_attr($string)
{
    
    $array = preg_split('/[,;\r\n]+/', trim($string, ",;\r\n"));
    
    if (strpos($string, ':')) {
        
        $value = [];
        
        foreach ($array as $val) {
            
            list($k, $v) = explode(':', $val);
            
            $value[$k] = $v;
        }
        
    } else {
        
        $value = $array;
    }
    
    return $value;
}

/**
 * 解析数组配置
 */
function parse_config_array($name = '')
{
    
    return parse_config_attr(config($name));
}

/**
 * 将二维数组数组按某个键提取出来组成新的索引数组
 */
function array_extract($array = [], $key = 'id')
{
    
    $count = count($array);
    
    $new_arr = [];
     
    for($i = 0; $i < $count; $i++) {
        
        if (!empty($array) && !empty($array[$i][$key])) {
            
            $new_arr[] = $array[$i][$key];
        }
    }
    
    return $new_arr;
}

/**
 * 根据某个字段获取关联数组
 */
function array_extract_map($array = [], $key = 'id'){
    
    
    $count = count($array);
    
    $new_arr = [];
     
    for($i = 0; $i < $count; $i++) {
        
        $new_arr[$array[$i][$key]] = $array[$i];
    }
    
    return $new_arr;
}

/**
 * 页面数组提交后格式转换 
 */
function transform_array($array)
{

    $new_array = array();
    $key_array = array();

    foreach ($array as $key=>$val) {

        $key_array[] = $key;
    }

    $key_count = count($key_array);

    foreach ($array[$key_array[0]] as $i => $val) {
        
        $temp_array = array();

        for( $j=0;$j<$key_count;$j++ ){

            $key = $key_array[$j];
            $temp_array[$key] = $array[$key][$i];
        }

        $new_array[] = $temp_array;
    }

    return $new_array;
}

/**
 * 页面数组转换后的数组转json
 */
function transform_array_to_json($array)
{
    
    return json_encode(transform_array($array));
}

/**
 * 关联数组转索引数组
 */
function relevance_arr_to_index_arr($array)
{
    
    $new_array = [];
    
    foreach ($array as $v)
    {
        
        $temp_array = [];
        
        foreach ($v as $vv)
        {
            $temp_array[] = $vv;
        }
        
        $new_array[] = $temp_array;
    }
    
    return $new_array;
}

/**
 * 数组转换为字符串，主要用于把分隔符调整到第二个参数
 * @param  array  $arr  要连接的数组
 * @param  string $glue 分割符
 * @return string
 */
function arr2str($arr, $glue = ',')
{
    
    return implode($glue, $arr);
}

/**
 * 数组转字符串二维
 * @param  array  $arr  要连接的数组
 * @param  string $glue 分割符
 * @return string
 */
function arr22str($arr)
{
    
    $t ='' ;
    $temp = [];
    foreach ($arr as $v) {
        $v = join(",",$v);
        $temp[] = $v;
    }
    foreach ($temp as $v) {
        $t.=$v.",";
    }
    $t = substr($t, 0, -1);
    return $t;
}


// +---------------------------------------------------------------------+
// | 字符串相关函数
// +---------------------------------------------------------------------+

/**
 * 字符串转换为数组，主要用于把分隔符调整到第二个参数
 * @param  string $str  要分割的字符串
 * @param  string $glue 分割符
 * @return array
 */
function str2arr($str, $glue = ',')
{
    
    return explode($glue, $str);
}

/**
 * 字符串替换
 */
function sr($str = '', $target = '', $content = '')
{
    
    return str_replace($target, $content, $str);
}

/**
 * 字符串前缀验证
 */
function str_prefix($str, $prefix)
{
    
    return strpos($str, $prefix) === DATA_DISABLE ? true : false;
}

// +---------------------------------------------------------------------+
// | 文件相关函数
// +---------------------------------------------------------------------+

/**
 * 获取目录下所有文件
 */
function file_list($path = '')
{
    
    $file = scandir($path);
    
    foreach ($file as $k => $v) {
        
        if (is_dir($path . SYS_DS_PROS . $v)) {
            
            unset($file[$k]);
        }
    }
    
    return array_values($file);
}

/**
 * 获取目录列表
 */
function get_dir($dir_name)
{
    
    $dir_array = [];
    
    if (false != ($handle = opendir($dir_name))) {
        
        $i = 0;
        
        while (false !== ($file = readdir($handle))) {
            
            if ($file != "." && $file != ".."&&!strpos($file,".")) {
                
                $dir_array[$i] = $file;
                
                $i++;
            }
        }
        
        closedir($handle);
    }
    
    return $dir_array;
}

/**
 * 获取文件根目录
 */
function get_file_root_path()
{
    
    $root_arr = explode(SYS_DS_PROS, URL_ROOT);
    
    array_pop($root_arr);
    
    $root_url = arr2str($root_arr, SYS_DS_PROS);
    
    return $root_url . SYS_DS_PROS;
}

/**
 * 获取图片url
 */
function get_picture_url($id = 0)
{

    $fileLogic = get_sington_object('fileLogic', LogicFile::class);
    
    return $fileLogic->getPictureUrl($id);
}

/**
 * 获取文件url
 */
function get_file_url($id = 0)
{
    
    $fileLogic = get_sington_object('fileLogic', LogicFile::class);
    
    return $fileLogic->getFileUrl($id);
}

/**
 * 删除所有空目录 
 * @param String $path 目录路径 
 */
function rm_empty_dir($path)
{
    
    if (!(is_dir($path) && ($handle = opendir($path))!==false)) {
        
        return false;
    }
      
    while(($file = readdir($handle))!==false)
    {

        if (!($file != '.' && $file != '..')) {
            
           continue;
        }
        
        $curfile = $path . SYS_DS_PROS . $file;// 当前目录

        if (!is_dir($curfile)) {
            
           continue;  
        }

        rm_empty_dir($curfile);

        if (count(scandir($curfile)) == 2) {
            
            rmdir($curfile);
        }
    }

    closedir($handle); 
}


// +---------------------------------------------------------------------+
// | 时间相关函数
// +---------------------------------------------------------------------+

/**
 * 时间戳格式化
 * @param int $time
 * @return string 完整的时间显示
 */
function format_time($time = null, $format='Y-m-d H:i:s')
{
    
    if (null === $time) {
        
        $time = TIME_NOW;
    }
    
    return date($format, intval($time));
}

/**
 * 获取指定日期段内每一天的日期
 * @param Date $startdate 开始日期
 * @param Date $enddate  结束日期
 * @return Array
 */
function get_date_from_range($startdate, $enddate)
{
    
  $stimestamp = strtotime($startdate);
  $etimestamp = strtotime($enddate);
  
  // 计算日期段内有多少天
  $days = ($etimestamp-$stimestamp)/86400+1;
  
  // 保存每天日期
  $date = [];
  
  for($i=0; $i<$days; $i++) {
      
      $date[] = date('Y-m-d', $stimestamp+(86400*$i));
  }
  
  return $date;
}

// +---------------------------------------------------------------------+
// | 调试函数
// +---------------------------------------------------------------------+

/**
 * 将数据保存为PHP文件，用于调试
 */
function sf($arr = [], $fpath = './test.php')
{
    
    $data = "<?php\nreturn ".var_export($arr, true).";\n?>";
    
    file_put_contents($fpath, $data);
}

/**
 * dump函数缩写
 */
function d($arr = [])
{
    dump($arr);
}

/**
 * dump与die组合函数缩写
 */
function dd($arr = [])
{
    dump($arr);die;
}


// +---------------------------------------------------------------------+
// | 其他函数
// +---------------------------------------------------------------------+

/**
 * 通过类创建逻辑闭包
 */
function create_closure($object = null, $method_name = '', $parameter = [])
{
    
    $func = function() use($object, $method_name, $parameter) {
        
                return call_user_func_array([$object, $method_name], $parameter);
            };
            
    return $func;
}

/**
 * 通过闭包控制缓存
 */
function auto_cache($key = '', $func = null, $time = 3)
{
    
    $result = cache($key);
    
    if (empty($result)) {
        
        $result = $func();
        
        !empty($result) && cache($key, $result, $time);
    }
    
    return $result;
}

/**
 * 通过闭包列表控制事务
 */
function closure_list_exe($list = [])
{
    
    Db::startTrans();
    
    try {
        
        foreach ($list as $closure) {
            
            $closure();
        }
        
        Db::commit();
        
        return true;
    } catch (\Exception $e) {
        
        Db::rollback();
        
        throw $e;
    }
}

/**
 * 自动封装事务
 */
function trans($parameter = [], $callback = null)
{
    
    try {

        Db::startTrans();

        $backtrace = debug_backtrace(false, 2);

        array_shift($backtrace);

        $class = $backtrace[0]['class'];

        $result = (new $class())->$callback($parameter);

        Db::commit();

        return $result;

    } catch (Exception $ex) {

        Db::rollback();

        throw new Exception($ex->getMessage());
    }
}

/**
 * 更新缓存版本
 */
function update_cache_version($obj = null)
{
    
    $ob_auto_cache = cache('ob_auto_cache');

    is_string($obj) ? $ob_auto_cache[$obj]['version']++ : $ob_auto_cache[$obj->getTable()]['version']++;

    cache('ob_auto_cache', $ob_auto_cache);
}
/**
 * 现金收支记录日志
 *type 1.XXX卖出MDC，获得分享提成;2.购买；3.卖出；4.提现
 */
function moneyyj_log($money,$userid,$type=0,$getid='',$beizhu='')
{
    if(empty($money)){
        return true;
    }
    if($type < 50){
        $str='moneyMy';
    }elseif($type>49 && $type<100){
        $str='count';
    }else{
        $str='xfq';
    }
    $yue = db('user')->where('id',$userid)->value($str);
	$balance=$yue+$money;
    $arr=array(
		'money'=>$money,
		'user_id'=>$userid,
		'balance'=>$balance,
		'type'=>$type,
		'getid'=>$getid,
		'beizhu'=>$beizhu,
		'create_time'=>time()
	);
	db('moneyyj')->startTrans();
    $res=db('moneyyj')->insert($arr);
	$re=db('user')->where('id',$userid)->update(array($str=>$balance));
	if($res && $re){
		db('moneyyj')->commit();
        //推送
        if($type != 2 && $type != 4 && $type != 6 && $type != 8  ){
            //jpush($userid,3,'您的现金账户有新的收入到账啦！');
        }
		return true;
	}else{
		db('moneyyj')->rollback();
		return false;
	}
}
/**
 * 检查MDC
 * type 0初始币 1分享获取 2步数换取 3购买 4转让 5公司认证 6系统获取 7兑换
 */
function is_checkMoney($type,$money_id,$user_id){
	$info=db('money')->where(array('id'=>$money_id,'user_id'=>$user_id))->find();
	if(empty($info)){
		return false;
	}
	if( $type == 1 && ($info['is']==1 || $info['status']==0 || $info['isys'] == 1) ){
		return false;
	}elseif($type == 2 && ($info['is']==1 || $info['status']==0 || $info['isys'] == 1)){
		return false;
	}elseif($type == 3 && ($info['status']==0 )){
		return false;
	}elseif($type == 4 && ($info['is']==1 || $info['status']==0 || $info['isys'] == 0)){
		return false;
	}elseif($type == 5 && ($info['is']==1 || $info['status']==0 || $info['isys'] == 1)){
		return false;
	}elseif($type == 6 && ($info['is']==1 || $info['status']==0 || $info['isys'] == 0)){
		return false;
	}else{
		return true;
	}
}
/**
 * 检查MDC
 * type 0初始币 1分享获取 2步数换取 3购买 4转让 5公司认证 6系统获取
 */
function is_checkMoneys($type,$money_id,$user_id){
	$info=db('money')->where(array('id'=>$money_id,'user_id'=>$user_id))->find();
	if(empty($info)){
		return '该UDC币所属错误';
	}
	if($type == 3 && ($info['is']==0 || $info['status']==0 )){
		return '该UDC币不处于挂卖状态或是该币已禁止交易';
	}elseif($type != 3 && ($info['is']==1 || $info['status']==0 || $info['isys'] == 0)){
		return '该UDC币为原始币或是MDC币处于挂卖状态，禁止交易转让';
	}else{
		return false;
	}
}
/**
 * 支付方式
 */
function getPay($grade){
    $arrType=array(
        1=>'积分支付',
        2=>'现金支付',
        3=>'消费券支付',
        4=>'微信支付',
        5=>'支付宝支付'
    );
    return $arrType[$grade];
}
/**
 * 现金余额来源
 */
function moneyyjType($type = 1, $userid)
{
	$info=db('user')->field('username,name')->where('id',$userid)->find();
    if(strlen($info['username']) == 11){
        $info['username']=substr_replace($info['username'], '****',3, 4);
    }
	$arrType=array(
        0=>'拨付现金',
        1=>'转账给用户'.$info{"username"}.'（'.$info["name"].'），余额减少',
        2=>'收到用户'.$info{"username"}.'（'.$info["name"].'）转账，余额增加',
        3=>'购买商品，扣款',
        4=>'提现，扣除',
        5=>'撤销或是拒绝提现，返还',
        6=>'购买商品，余额扣除',
        7=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，分享获得收益',
        8=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，带动获得收益',
        9=>'用户'.$info{"username"}.'（'.$info["name"].'）收款，分享获得收益',
        10=>'用户'.$info{"username"}.'（'.$info["name"].'）收款，带动获得收益',
        11=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，区县级服务中心分润',
        12=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，市级服务中心分润',
        13=>'70%平台大公号',
        14=>'7%全国加权公号',
        15=>'3%平台小公号',
        16=>'系统利润',
        17=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，店主结算',
        18=>'撤销订单，返还',
        19=>'服务商分润',
        20=>'服务商分润,扣除',
        21=>'市级服务商分润',
        22=>'区县级服务商分润',
        23=>'用户'.$info{"username"}.'（'.$info["name"].'）购买抢购专区商品，分享获得分润',
        24=>'用户'.$info{"username"}.'（'.$info["name"].'）购买抢购专区商品，带动获得分润',
        50=>'拨付积分',
        51=>'线下消费，获得积分',
        52=>'积分转换',
        53=>'购买商品，积分扣除',
        54=>'用户加入，获得积分',
        55=>'用户'.$info{"username"}.'（'.$info["name"].'）用户加入，分享获得收益',
        56=>'转账给用户'.$info{"username"}.'（'.$info["name"].'），积分减少',
        57=>'收到用户'.$info{"username"}.'（'.$info["name"].'）转账，积分增加',
        58=>'撤销订单，返还',
        100=>'拨付消费券',
        101=>'积分转换,消费券增加',
        102=>'购买商品,消费券扣除',
        103=>'用户'.$info{"username"}.'（'.$info["name"].'）用户加入，分享获得收益',
        104=>'转账给用户'.$info{"username"}.'（'.$info["name"].'），消费券减少',
        105=>'收到用户'.$info{"username"}.'（'.$info["name"].'）转账，消费券增加',
        106=>'撤销订单，返还'
	);
	return $arrType[$type];
}
/**
 * 用户身份
 */
function userSf($grade){
    $arrType=array(
        0=>'普通用户',
        1=>'创业人员',
        2=>'预备服务商',
        3=>'服务商',
        4=>'预备市级服务商',
        5=>'市级服务商',
        6=>'区县服务商'
    );
    return $arrType[$grade];
}
/**
 * 现金余额来源
 */
function moneyyjTypes($type = 1, $userid)
{
    $info=db('user')->field('username,name')->where('id',$userid)->find();
    $arrType=array(
        0=>'拨付现金',
        1=>'转账给用户'.$info{"username"}.'（'.$info["name"].'），余额减少',
        2=>'收到用户'.$info{"username"}.'（'.$info["name"].'）转账，余额增加',
        3=>'购买商品，扣款',
        4=>'提现，扣除',
        5=>'撤销或是拒绝提现，返还',
        6=>'购买商品，余额扣除',
        7=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，分享获得收益',
        8=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，带动获得收益',
        9=>'用户'.$info{"username"}.'（'.$info["name"].'）收款，分享获得收益',
        10=>'用户'.$info{"username"}.'（'.$info["name"].'）收款，带动获得收益',
        11=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，区县级服务中心分润',
        12=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，市级服务中心分润',
        13=>'70%平台大公号',
        14=>'7%全国加权公号',
        15=>'3%平台小公号',
        16=>'系统利润',
        17=>'用户'.$info{"username"}.'（'.$info["name"].'）消费，店主结算',
        18=>'撤销订单，返还',
        19=>'服务商分润',
        20=>'服务商分润,扣除',
        21=>'市级服务商分润',
        22=>'区县级服务商分润',
        23=>'用户'.$info{"username"}.'（'.$info["name"].'）购买抢购专区商品，分享获得分润',
        24=>'用户'.$info{"username"}.'（'.$info["name"].'）购买抢购专区商品，带动获得分润',
        50=>'拨付积分',
        51=>'线下消费，获得积分',
        52=>'积分转换',
        53=>'购买商品，积分扣除',
        54=>'用户加入，获得积分',
        55=>'用户'.$info{"username"}.'（'.$info["name"].'）用户加入，分享获得收益',
        56=>'转账给用户'.$info{"username"}.'（'.$info["name"].'），积分减少',
        57=>'收到用户'.$info{"username"}.'（'.$info["name"].'）转账，积分增加',
        58=>'撤销订单，返还',
        100=>'拨付消费券',
        101=>'积分转换,消费券增加',
        102=>'购买商品,消费券扣除',
        103=>'用户'.$info{"username"}.'（'.$info["name"].'）用户加入，分享获得收益',
        104=>'转账给用户'.$info{"username"}.'（'.$info["name"].'），消费券减少',
        105=>'收到用户'.$info{"username"}.'（'.$info["name"].'）转账，消费券增加',
        106=>'撤销订单，返还'
    );
    return $arrType[$type];
}

/**
 * 验证手机号
 */
function checkCode($phone,$code,$type=0)
{
	$info=db('code')->field('code,create_time')->where("type=".$type." and phone='".$phone."'")->find();
	if($code != $info['code']){
		return ['code' => 1010006, 'msg' => '手机验证码错误'];
	}
	if(time()-$info['create_time'] > 180){
		return ['code' => 1010007, 'msg' => '手机验证码已过期'];
	}
	return false;
}
/**
 * 验证邮箱
 */
function checkEmail($email,$code)
{
	$info=db('email')->field('codes,create_time')->where(" email='".$email."'")->find();
	if($code != $info['codes']){
		return ['code' => 1010006, 'msg' => '验证码错误'];
	}
	if(time()-$info['create_time'] > 1800){
		return ['code' => 1010007, 'msg' => '验证码已过期'];
	}
	return false;
}


/**
 * 添加日志
 */
function logs($data){
   $log_file = 'D:\wwwroot\hr.schqhy.com\log\a'.date('Ymd',time()).'_api.log';
   $content =var_export($data,TRUE);
   $content .= "\r\n\n";
   file_put_contents($log_file,$content, FILE_APPEND);
}

/**
 * @param 消息推送
 * @return string 年龄
 * type 1公司认证 2提现结果 3获得现金 4获得mdc 5谁标记了我的简历 6收到简历
 */
function jpush($user_id,$type,$cont)
{
    $title=setMsg($type);
    import("Jpush.autoload");
    $is=db('user')->where('id',$user_id)->value('is');
    if($is==1){
        $app_key='e5e770b8982167b38d4728a3';
        $master_secret='522afaa3b60b7544a6458b84';
    }else{
        $app_key='eb37b66727665f5075aa5545';
        $master_secret='48f0f8356f837970190af5f6';
    }
    $client = new \JPush\Client($app_key, $master_secret);
    $pusher = $client->push();
    $pusher->setPlatform('all');
    $pusher->addAlias($user_id);
    //$pusher->addAllAudience();
    //$pusher->setNotificationAlert('您的认证已通过，可以去发布职位了！');
    $pusher->iosNotification([
        'title'=>$title,
        'subtitle'=>$cont
    ], [
        'sound' => 'sound',
        'badge' => '+1',
        'extras' => [
            'type' =>$type
        ]
    ]);
    $pusher->options([
        'apns_production' => true
    ]);
    $pusher->androidNotification($cont,[
        'title'=>$title,
        'extras' => [
            'type' =>$type
        ]
    ]);
    try {
        $pusher->send();
    } catch (\JPush\Exceptions\JPushException $e) {
        // try something else here
        return $e;exit;
    }
    return true;
}
//推送消息
function setMsg($type){
    $tarr=array(
        1=>'公司认证通过',
        2=>'提现转款通知',
        3=>'收入到账通知',
        4=>'MDC到账通知',
        5=>'简历被关注通知',
        6=>'收到简历通知',
    );
    return $tarr[$type];
}
/**
 * 获取当前服务器的IP
 * @return Ambigous <string, unknown>
 */
function get_client_ip()
{
    if (isset($_SERVER['REMOTE_ADDR'])) {
        $cip = $_SERVER['REMOTE_ADDR'];
    } elseif (getenv("REMOTE_ADDR")) {
        $cip = getenv("REMOTE_ADDR");
    } elseif (getenv("HTTP_CLIENT_IP")) {
        $cip = getenv("HTTP_CLIENT_IP");
    } else {
        $cip = "127.0.0.1";
    }
    return $cip;
}
/**
 * 生成唯一邀请码
 */
function initcode() {
    $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $rand = $code[rand(0,25)]
        .strtoupper(dechex(date('m')))
        .date('d').substr(time(),-5)
        .substr(microtime(),2,5)
        .sprintf('%02d',rand(0,99));
    for(
        $a = md5( $rand, true ),
        $s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
        $d = '',
        $f = 0;
        $f < 5;
        $g = ord( $a[ $f ] ),
        $d .= $s[ ( $g ^ ord( $a[ $f + 8 ] ) ) - $g & 0x1F ],
        $f++
    );
    $is=db('user')->where('invitation',$d)->value('id');
    if(!empty($is)){
        initcode();
    }
     return $d;
}
/**
 * 审核订单
 */
 function groupAdd($order_sn,$money,$user_id,$getid){	 			
	$balance=db('user')->where('id',$user_id)->value('moneyMy');
	if($balance < $money){
		return false;
	}
	Db::startTrans();
	moneyyj_log($money*(-1),$user_id,3,$getid);
	$res = db('order_goods')->where('order_sn',$order_sn)->update(array('stat'=>1,'zf_time'=>date('Y-m-d H:i:s')));
	if($res){
		Db::commit();
		return true;
	}else{
		Db::rollback();
		return false;
	}
 }
/**
 * 分润
 */
function fenrun($user_id,$getid,$money,$lrbl,$btbl,$bl,$city,$county,$sharid,$catid=2){
    moneyyj_log($money*$lrbl,10005,16,$user_id,'平台利润');
    if($catid != 1){
        moneyyj_log($money*$btbl*5,$user_id,51,$user_id,'线下消费，返还积分');
    }
    moneyyj_log($money*$btbl*0.7,10001,13,$user_id,'70%平台大公号');
    moneyyj_log($money*$btbl*0.03,10002,15,$user_id,'3%平台小公号');
    moneyyj_log($money*$btbl*0.07,10006,14,$user_id,'7%全国加权公号');
    if(!empty($sharid)){
        moneyyj_log($money*$btbl*0.05,$sharid,7,$user_id);
        $tjjid=db('user')->where('id',$sharid)->value('tjid');
        if(!empty($tjjid)){
            moneyyj_log($money*$btbl*0.03,$tjjid,8,$user_id);
        }
    }
    $tjid=db('user')->where('id',$getid)->value('tjid');
    if(!empty($tjid)){
        moneyyj_log($money*$btbl*0.05,$tjid,9,$getid);
        $tjjids=db('user')->where('id',$tjid)->value('tjid');
        if(!empty($tjjids)){
            moneyyj_log($money*$btbl*0.03,$tjjids,10,$getid);
        }
    }
    $xdl=db('user')->where(['is_service'=>1,'county'=>$county])->value('id');
    if(!empty($xdl)){
        moneyyj_log($money*$btbl*0.03,$xdl,11,$user_id);
    }else{
        moneyyj_log($money*$btbl*0.03,10003,11,$user_id);
    }
    $sdl=db('user')->where(['is_service'=>1,'city'=>$city,'county'=>''])->value('id');
    if(!empty($sdl)){
        moneyyj_log($money*$btbl*0.01,$sdl,12,$user_id);
    }else{
        moneyyj_log($money*$btbl*0.01,10004,12,$user_id);
    }
    moneyyj_log($money*$bl,$getid,17,$user_id);
}
/**
 * 微信获取openid
 */
function getUserInfo($code){
    //$url='https://api.weixin.qq.com/sns/jscode2session?appid='.$this->appid.'&secret='.$this->appsecret.'&js_code='.$code.'&grant_type=authorization_code';
    $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx3f6de126bb13ca05&secret=8fb3d29df80e1042f182c7787d748ed7&code='.$code.'&grant_type=authorization_code';
    $accessJson = http_request( $url );
    //获取access_token
    $accessArray = json_decode($accessJson , true);
    if(isset($accessArray['errcode'])){
        return $accessArray['errmsg'];
    }else{
        $Rurl = "https://api.weixin.qq.com/sns/userinfo?access_token=".$accessArray['access_token']."&openid=".$accessArray['openid']."&lang=zh_CN";
        $accessJson = http_request( $Rurl );
        $uinfo = json_decode($accessJson , true);
        return $uinfo;
    }
}
function http_request($curl, $method='get', $data=null, $https=true){
    $ch = curl_init();//初始化
    curl_setopt($ch, CURLOPT_URL, $curl);//设置访问的URL
    curl_setopt($ch, CURLOPT_HEADER, false);//设置不需要头信息
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//只获取页面内容，但不输出
    if($https){
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//不做服务器认证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//不做客户端认证
    }
    if($method == 'post'){
        curl_setopt($ch, CURLOPT_POST, true);//设置请求是POST方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//设置POST请求的数据
    }
    $str = curl_exec($ch);//执行访问，返回结果
    curl_close($ch);//关闭curl，释放资源
    return $str;
}
/**
 * 二维码分享图片合成
 */
function createSharePngs($gData,$fileName = ''){
    //创建画布
    $im = imagecreatetruecolor(640, 1136);

    //填充画布背景色
    $color = imagecolorallocate($im, 255, 255, 255);
    imagefill($im, 0, 0, $color);
    //背景
    list($l_w,$l_h) = getimagesize($gData['bg']);
    $logoImg = @imagecreatefrompng($gData['bg']);
    if(empty($logoImg)){
        return false;
    }
    imagecopyresized($im, $logoImg, 0, 0, 0, 0, 640, 1136, $l_w, $l_h);
    //二维码
    list($g_w,$g_h) = getimagesize($gData['pic']);
    $goodImg = createImageFromFile($gData['pic']);
    if(empty($goodImg)){
        return false;
    }
    imagecopyresized($im, $goodImg, 35,981, 0, 0, 119, 119, $g_w, $g_h);
    //输出图片
    if($fileName){
        imagepng ($im,$fileName);
        @unlink($gData['pic']);
    }else{
        Header("Content-Type: image/png");
        imagepng ($im);
    }
    @unlink($gData['pic']);
    //释放空间
    imagedestroy($im);
    imagedestroy($goodImg);

}
/**
 * 从图片文件创建Image资源
 * @param $file 图片文件，支持url
 * @return bool|resource    成功返回图片image资源，失败返回false
 */
function createImageFromFile($file){
    if(preg_match('/http(s)?:\/\//',$file)){
        $fileSuffix = getNetworkImgType($file);
    }else{
        $fileSuffix = pathinfo($file, PATHINFO_EXTENSION);
    }

    if(!$fileSuffix) return false;

    switch ($fileSuffix){
        case 'jpeg':
            $theImage = @imagecreatefromjpeg($file);
            break;
        case 'jpg':
            $theImage = @imagecreatefromjpeg($file);
            break;
        case 'png':
            $theImage = @imagecreatefrompng($file);
            break;
        case 'gif':
            $theImage = @imagecreatefromgif($file);
            break;
        default:
            $theImage = @imagecreatefromstring(file_get_contents($file));
            break;
    }

    return $theImage;
}
/**
 * 预估分润
 */
function ygMoney($user_id,$gid=0,$did=0){
    if(!empty($gid)){
        $info=db('goods')->field('user_id,money,lrbl,btbl,bl,city,county')->where('id',$gid)->find();
    }else{
        $info=db('dian')->field('user_id,money,lrbl,btbl,bl,city,county')->where('id',$did)->find();
    }
    $money=$info['money'];
    $btbl=$info['btbl'];
    db('user')->where('id',10005)->setInc('ygmoney',$money*$info['lrbl']);
    if(!empty($did)){
        db('user')->where('id',$user_id)->setInc('ygmoney',$money*$btbl*5);
    }
    db('user')->where('id',10001)->setInc('ygmoney',$money*$btbl*0.7);
    db('user')->where('id',10002)->setInc('ygmoney',$money*$btbl*0.03);
    db('user')->where('id',10006)->setInc('ygmoney',$money*$btbl*0.07);
    $sharid=db('user')->where('id',$user_id)->value('tjid');
    if(!empty($sharid)){
        db('user')->where('id',$sharid)->setInc('ygmoney',$money*$btbl*0.05);
        $tjjid=db('user')->where('id',$sharid)->value('tjid');
        if(!empty($tjjid)){
            db('user')->where('id',$tjjid)->setInc('ygmoney',$money*$btbl*0.03);
        }
    }
    $tjid=db('user')->where('id',$info['user_id'])->value('tjid');
    if(!empty($tjid)){
        db('user')->where('id',$tjid)->setInc('ygmoney',$money*$btbl*0.05);
        if(!empty($tjjids)){
            db('user')->where('id',$tjjid)->setInc('ygmoney',$money*$btbl*0.03);
        }
    }
    $xdl=db('user')->where(['is_service'=>1,'county'=>$info['county']])->value('id');
    if(!empty($xdl)){
        db('user')->where('id',$xdl)->setInc('ygmoney',$money*$btbl*0.03);
    }else{
        db('user')->where('id',10003)->setInc('ygmoney',$money*$btbl*0.03);
    }
    $sdl=db('user')->where(['is_service'=>1,'city'=>$info['city'],'county'=>''])->value('id');
    if(!empty($sdl)){
        db('user')->where('id',$sdl)->setInc('ygmoney',$money*$btbl*0.01);
    }else{
        db('user')->where('id',10004)->setInc('ygmoney',$money*$btbl*0.01);
    }
    db('user')->where('id',$getid)->setInc('ygmoney',$money*$info['bl']);
}